package com.CodeBlock代码块;

public class 代码块快速入门 {
    public static void main(String[] args) {
        //创建一个对像，传入1，2，3，4  会调用A(int n1, int n2, int n3, int n4)构造器，调用之前会执行代码块
        new A(1,2,3,4);
        System.out.println();
        new A(4,5,6);
        System.out.println();
        new A(7,8);
        System.out.println();
        new A(9);
        System.out.println();

    }
}
class A {
    private int n1;
    private int n2;
    private int n3;
    private int n4;
    {   //代码块在构造器之前执行，不管调用哪个构造器，代码块都会执行
        System.out.println("代码块的作用");
        System.out.println("如果每个构造器中都有重复的语句的话可以放到代码块中");
        System.out.println("因为代码块会在调用构造器时先执行");
        System.out.println("=============================");
    }
//构造器的重载,根据参数个数和类型不同调用不同的构造器
    public A(int n1) {
        this.n1 = n1;
        System.out.println("A(int n1)被调用");
    }
    public A(int n1, int n2) {
        this.n1 = n1;
        this.n2 = n2;
        System.out.println("A(int n1, int n2)被调用");
    }
    public A(int n1, int n2, int n3) {
        this.n1 = n1;
        this.n2 = n2;
        this.n3 = n3;
        System.out.println("A(int n1, int n2, int n3)被调用");
    }
    public A(int n1, int n2, int n3, int n4) {
        this.n1 = n1;
        this.n2 = n2;
        this.n3 = n3;
        this.n4 = n4;
        System.out.println("A(int n1, int n2, int n3, int n4) 被调用");
    }
}

/**
 * 1.static代码块也叫静态代码块，静态代码块  “在类加载”   的时候执行，只执行一次
 * 2.不加static修饰的代码块，是在对象创建的时候执行，每次创建对象都会执行一次，如果只是使用静态成员，则普通代码块不执行；
 *
 * 3.类什么时候会被加载：
 *   3.1创建对象实例时（new）
 *   3.2使用类的静态成员（静态属性、静态方法）
 *   3.3创建子类对象实例时，父类也会被加载，而且父类先被加载，子类后被加载。
 */